home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
076-100
/
084
/
ed
/
bitmap.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-13
|
1KB
|
78 lines
/*
* BITMAP.C - makebitmap, setbit, testbit
* bit-map manipulation routines.
*
* Copyright (c) Allen I. Holub, all rights reserved. This program may
* for copied for personal, non-profit use only.
*
*/
#ifdef DEBUG
#include <stdio.h>
#endif
#include "tools.h"
BITMAP *makebitmap( size )
unsigned size;
{
/* Make a bit map with "size" bits. The first entry in
* the map is an "unsigned int" representing the maximum
* bit. The map itself is concatenated to this integer.
* Return a pointer to a map on success, 0 if there's
* not enough memory.
*/
unsigned *map, numbytes;
extern char *malloc ();
numbytes = (size >> 3) + ((size & 0x07) ? 1 : 0 );
#ifdef DEBUG
printf("Making a %d bit map (%d bytes required)\n", size, numbytes);
#endif
if( map = (unsigned *) malloc( numbytes + sizeof(unsigned) ))
*map = size;
return ((BITMAP *)map);
}
setbit( c, map, val )
unsigned c, val;
char *map;
{
/* Set bit c in the map to val.
* If c > map-size, 0 is returned, else 1 is returned.
*/
if( c >= *(unsigned *)map ) /* if c >= map size */
return 0;
map += sizeof(unsigned); /* skip past size */
if( val )
map[c >> 3] |= 1 << (c & 0x07);
else
map[c >> 3] &= ~(1 << (c & 0x07));
return( 1 );
}
testbit( c, map )
unsigned c;
char *map;
{
/* Return 1 if the bit corresponding to c in map is set.
* 0 if it is not.
*/
if( c >= *(unsigned *)map )
return 0;
map += sizeof(unsigned);
return(map[ c >> 3 ] & (1 << (c & 0x07)));
}